/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.hamacekj.geometr;

import java.awt.Graphics2D;
import java.awt.font.TextAttribute;
import java.awt.geom.Rectangle2D;
import java.text.AttributedString;

/**
 * Nástroj k uchovávání a kreslení popisků.
 * @author hamacekh
 */
public class LabelPainter{
    private java.awt.Point point;
    private String originalString;
    private AttributedString attrString;

    public LabelPainter(java.awt.Point point, String label) {
        this.point = point;
        this.originalString = label;
        String original = label;
        attrString = new AttributedString(label);
        String name = label.replaceAll("[0-9]$", "");
        if(name.length() < original.length()){
            attrString.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB, name.length(), original.length());
        }
        attrString.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
    }

    /**
     * Nakreslí popisek pomocí g. Popisky ve tvaru textčíslo budou vykresleny
     * s číslem jako dolní index.
     * @param g 
     */
    public void paintLabel(Graphics2D g){
        g.drawString(attrString.getIterator(), point.x, point.y);
    }
    
    /**
     * Vrátí šířku v px výsledného popisku (přesné, počítá i s dolním indexem).
     * @param g
     * @return Šířka výsledného popisku.
     */
    public int getWidth(Graphics2D g){
        Rectangle2D rect = g.getFontMetrics(g.getFont()).getStringBounds(
                attrString.getIterator(), 0, originalString.length(), g);
        return (int)rect.getWidth();
    }
    
    /**
     * Vrátí pozici, kam bude vykreslen popisek.
     * @return Pozice popisku.
     */
    public java.awt.Point getPoint(){
        return point;
    }
}